package com.zsrt.java.ch03;


/**
 * 用链表模拟的队列： 先进先出 后进后出
 * @author zsrt
 *
 */
public class Queue {
	
	private Node head;
	
	public Queue(Node head){
		this.head =head;
	}
	
	
	/**
	 * 判断栈是否为空
	 * @return
	 */
	public boolean isEmpty(){
		
		Node p= this.head;//将头节点作为当前节点 p代表当前节点
		
		return p.getNext() == null;
	}
	
	
	/**
	 * 模拟入列 ： 入列是把数据放在最后1个节点 相当于link的添加  入队  入列
	 * @param node
	 */
	public void push(Node node){
		
		Node p=this.head;//将头节点作为当前节点 p代表当前节点
		
		while(p!=null){//如果当前节点不为null
			if(p.getNext() == null){//说明当前节点是最后1个节点
				//增加节点
				p.setNext(node);
				break;
				
			}
			//把当前节点的下一个节点赋值给当前节点 循环
			p=p.getNext();
			
		}
		
	}
	
	
	/**
	 * 模拟出列  出列返回的是头节点后面的第1个节点 因为这个效率最快   出队  出列
	 * @return
	 */
	public Node pop(){
		
		if(isEmpty()){
			return null;
		}
		
		//出栈的是接在头节点后的第1个节点  1 得到这个节点  2从栈中删除这个节点
		Node node  = this.head.getNext();
		this.head.setNext(node.getNext());
		return node;
	}
	

}
